home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / FuncEffect / bombstr.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-14  |  1.4 KB  |  73 lines

  1. #include <xsp2lib.h>
  2.  
  3. #include "../otoko.h"
  4. #include "../effect.h"
  5. #include "../player.h"
  6. #include "../priority.h"
  7.  
  8. #define    PALET_A    0x0100        /* 文字 BOMBER のパレット */
  9. #define    PALET_B    0x0300        /* 文字 BACK-B のパレット */
  10. #define    PALET_C    0x0600        /* 文字 LASER のパレット */
  11.  
  12. static short EffectMoveBombstr (EFFECT *);
  13.  
  14.  
  15. void EffectInitBombstr (EFFECT * p)
  16. {
  17.     p->pt = obj_bombstr + player->bomb_type - 1;
  18.     p->seq = 0;
  19.     p->func_effect_move = EffectMoveBombstr;
  20.     p->seq2 = player->bomb_type;    /* bomb_type を保存しておく */
  21.     switch (player->bomb_type) {
  22.     case BOMB_A:
  23.         p->info = PALET_A | PRIORITY_BOMB_STR;
  24.         break;
  25.     case BOMB_B:
  26.         p->info = PALET_B | PRIORITY_BOMB_STR;
  27.         break;
  28.     case BOMB_C:
  29.         p->info = PALET_C | PRIORITY_BOMB_STR;
  30.         break;
  31.     }
  32.  
  33.     /* プレイヤーのX座標によって文字を出す位置を変える */
  34.     if (player->x < 192) {
  35.         p->seq3 = 0;
  36.         p->lx = -8 << 16;
  37.         p->vx = 8 << 16;
  38.     } else {
  39.         p->seq3 = !0;
  40.         p->lx = -40 << 16;
  41.         p->vx = -8 << 16;
  42.     }
  43. }
  44.  
  45.  
  46.  
  47. static short EffectMoveBombstr (EFFECT * p)
  48. {
  49.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  50.     p->x = player->x + ((p->lx += p->vx) >> 16);
  51.     p->y = player->y;
  52.  
  53.     if (p->seq3 == 0) {
  54.         /* 右に出している時 */
  55.         if (p->vx > 1)
  56.             p->vx -= 2 << 16;
  57.         else
  58.             p->vx = 0;
  59.     } else {
  60.         /* 左に出している時 */
  61.         if (p->vx < -1)
  62.             p->vx += 2 << 16;
  63.         else
  64.             p->vx = 0;
  65.     }
  66.  
  67.     if (player->bomb_type != p->seq2)
  68.         return (-1);
  69.     xobj_set_st (p);
  70.  
  71.     return (0);
  72. }
  73.